package com.ants.boot.system.service.impl;

import com.ants.boot.core.enums.DataStatusEnum;
import com.ants.boot.model.BaseModel;
import com.ants.boot.system.dao.SysLoginLogMapper;
import com.ants.boot.system.domain.OperateLog;
import com.ants.boot.system.domain.SysLoginLog;
import com.ants.boot.system.dto.operatelog.QueryOperateLogDto;
import com.ants.boot.system.dto.sysloginlog.QuerySysLoginLogDto;
import com.ants.boot.system.service.SysLoginLogService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.List;

/**
 * @author 蚂蚁会花呗
 * @date 2022/3/22 13:56
 */
@Service
public class SysLoginLogServiceImpl extends ServiceImpl<SysLoginLogMapper, SysLoginLog> implements SysLoginLogService {

    @Override
    public IPage<SysLoginLog> pageInfo(QuerySysLoginLogDto dto) {
        QueryWrapper<SysLoginLog> queryWrapper = new QueryWrapper<>();
        Page<SysLoginLog> page = new Page<>(dto.getPageNum(),dto.getPageSize());
        if (StringUtils.isNotBlank(dto.getLoginName())){
            queryWrapper.lambda()
                    .like(SysLoginLog::getLoginName,dto.getLoginName());
        }
        if (StringUtils.isNotBlank(dto.getLoginIp())){
            queryWrapper.and(wrapper->wrapper.lambda().like(SysLoginLog::getLoginIp,dto.getLoginIp()));
        }
        if (StringUtils.isNotBlank(dto.getStartTime()) && StringUtils.isNotBlank(dto.getEndTime())){
            queryWrapper.and(wrapper->wrapper.lambda().between(SysLoginLog::getCreateTime,dto.getStartTime(),dto.getEndTime()));
        }
        queryWrapper.lambda().orderByDesc(BaseModel::getCreateTime);
        return this.page(page,queryWrapper);
    }

    @Override
    @Transactional
    public boolean delSysLoginLog(List<Integer> ids) {
        return this.removeByIds(ids);
    }

    @Override
    public boolean addSysLoginLog(SysLoginLog sysLoginLog) {
        sysLoginLog.setCreateTime(LocalDateTime.now());
        sysLoginLog.setUpdateTime(LocalDateTime.now());
        sysLoginLog.setStatus(DataStatusEnum.NORMAL_STATUS.getValue());
        return this.save(sysLoginLog);
    }
}
